$> ls -l
-rwrw-rw- 1 db0   db0 62.1 Ko 2015-03-30 19:37 Impatient C
-rwrw-rw- 1 db0   db0  3.5 Ko 2015-03-30 19:37 Impatient SCM
-rwrw-rw- 1 db0   db0  3.0 Ko 2015-03-30 19:37 Impatient Emacs
-rwrw-rw- 1 db0   db0  2.4 Ko 2015-03-30 19:37 Impatient Man Pages
-rwrw-rw- 1 db0   db0 10.5 Ko 2015-03-30 19:37 Impatient Perl
-rwrw-rw- 1 db0   db0 17.3 Ko 2015-03-30 19:37 Impatient Python
-rwrw-rw- 1 db0   db0 13.6 Ko 2015-03-30 19:37 Impatient Shell Debutant
-rwrw-rw- 1 db0   db0 16.4 Ko 2015-03-30 19:37 Impatient Shell Script
-rwrw-rw- 1 db0   db0  3.4 Ko 2015-03-30 19:37 Impatient Shell
-rwrw-rw- 1 db0   db0  1.8 Ko 2015-03-30 19:37 Impatient Vim


Warning

Contrairement aux autres articles, ceux de cette listes n'ont jamais été vérifiés ni relus depuis que je les ai rédigés en première année. Ils peuvent donc contenir des erreurs. Les informations qu'ils contiennent sont à prendre avec des pincettes et à vérifier.

Archives

Ancien Guest Book

-rwrw-rw- 1 db0   db0  0.9 Ko 2015-03-30 19:37 Financer Ses Etudes
-rwrw-rw- 1 db0   db0  2.4 Ko 2015-03-30 19:37 Languages A Apprendre En Tek1
-rwrw-rw- 1 db0   db0  1.1 Ko 2015-03-30 19:37 Makefile Le Retour
-rwrw-rw- 1 db0   db0  3.0 Ko 2015-03-30 19:37 Makefile De Base
-rwrw-rw- 1 db0   db0  1.2 Ko 2015-03-30 19:37 Pourquoi_printf_met_tout_a_la_fin
-rwrw-rw- 1 db0   db0  0.7 Ko 2015-03-30 19:37 Pourquoi_utiliser_getnextline_plutot_que_read_pour_le_minishell_et_autre_42sh
-rwrw-rw- 1 db0   db0  4.3 Ko 2015-03-30 19:37 Taille De Donnees Et Structures
-rwrw-rw- 1 db0   db0  1.5 Ko 2015-03-30 19:37 Cflags
-rwrw-rw- 1 db0   db0  1.6 Ko 2015-03-30 19:37 Hidenp.c
-rwrw-rw- 1 db0   db0  0.1 Ko 2015-03-30 19:37 Liens_utiles_my_select
-rwrw-rw- 1 db0   db0  2.1 Ko 2015-03-30 19:37 List_chainees.c
-rwrw-rw- 1 db0   db0  1.0 Ko 2015-03-30 19:37 Memo_rendu
-rwrw-rw- 1 db0   db0  4.8 Ko 2015-03-30 19:37 Minishell.c
-rwrw-rw- 1 db0   db0 32.7 Ko 2015-03-30 19:37 My_printf.c
-rwrw-rw- 1 db0   db0  4.5 Ko 2015-03-30 19:37 Ordalphlong.c
-rwrw-rw- 1 db0   db0  3.7 Ko 2015-03-30 19:37 Qcm.txt
-rwrw-rw- 1 db0   db0  5.8 Ko 2015-03-30 19:37 Str_to_inttab.c
-rwrw-rw- 1 db0   db0  0.6 Ko 2015-03-30 19:37 Verifier_les_fuites_memoires
-rwrw-rw- 1 db0   db0  0.5 Ko 2015-03-30 19:37 Verifier_les_syscall

Taille de données en mémoire et structures

Tout d'abord, il faut savoir que les types de données ont chacun une taille :

Type Nombre d'octets en mémoire Nombre de bits en mémoire Limite inférieure Limite supérieure
char 1 octet 8 bits - 128 127
unsigned char 1 octet 8 bits 0 255
short 2 octets 8 x 2 = 16 bits - 32 768 32 767
unsigned short 2 octets 8 x 2 = 16 bits 0 65 535
int 4 octets 8 x 4 = 32 bits - 2 147 483 648 2 147 483 647
unsigned int 4 octets 8 x 4 = 32 bits 0 4 294 967 295
long 4 octets 8 x 4 = 32 bits -2 147 483 648 2 147 483 647
unsigned long 4 octets 8 x 4 = 32 bits 0 4 294 967 295
float 4 octets 8 x 4 = 32 bits -3.4 x 10-38 3.4 x 1038
double 8 octets 8 x 8 = 64 bits -1.7 x 10-308 1.7 x 10308
long double 12 octets 8 x 12 = 96 bits -3.4 x 10-4932 3.4 x 104932


Cependant, la taille prise en mémoire est toujours "arrondie" à 4 octets près. Par exemple, quand on déclare un char, même si on a accés qu'à 1 octets, il en prend en réalité 4 en mémoire. C'est la raison pour laquelle on déclare généralement des int même si on a pas besoin de grandes valeurs.

Pourtant, ce n'est pas ce qui se passe lorsque l'on déclare des structures.
Observons plusieurs structures et leurs comportements en mémoire :
struct a
{
char a;
char b;
};
char

struct b
{
int a
char b;
int c
char d;
};
char char char char

struct c
{
int a;
int b;
char c;
char d;
};
char char char

Bilan

On a pu observer qu'il est plus intéressant de "trier" les types de données en mémoire par ordre décroissant, du plus grand au plus petit.
À noter : Un pointeur prend en général (sous FreeBSD en tout cas) 4 octets, peu importe la donnée vers laquelle il pointe.
Attention ! Ce n'est pas toujours vrai. Essayez par exemple de compiler un programme qui cast en (void *) un pointeur, vous aurez droit à un joli warning :
warning: cast from pointer to integer of different size

Bonnes structures, les petits potes !